Cosmopolitan Libc wraps system calls to provide high-level access to binary kernel interfaces. Linux is the gold standard for our suppport. However, if your program works on Linux, then it might not work on other platforms depending on which functions you use. The following table should help illuminate the portability of functions.
Last updated: Thu Apr 3 12:37:24 AM PDT 2025
Function | Linux | FreeBSD | OpenBSD | NetBSD | MacOS | Windows | Metal | Blink |
---|---|---|---|---|---|---|---|---|
read | best | best | best | best | best | ok | good | best |
write | best | best | best | best | best | ok | good | best |
pread | best | best | best | best | best | ok | zipos | best |
pwrite | best | best | best | best | best | ok | zipos | best |
readv | best | best | best | best | best | ok | best | best |
writev | best | best | best | best | best | ok | best | best |
preadv | 2009+ | v2.1+ | v2.1+ | v2.1+ | v2.1+ | v2.1+ | v2.1+ | v2.1+ |
pwritev | 2009+ | v2.1+ | v2.1+ | v2.1+ | v2.1+ | v2.1+ | v2.1+ | v2.1+ |
close | best | best | best | best | best | slow | best | best |
fstatat | best | best | best | best | best | best | best | best |
fstat | best | best | best | best | best | best | best | best |
statfs | best | best | best | best | best | best | fault | enosys |
fstatfs | best | best | best | best | best | best | fault | enosys |
_Exit | best | best | best | best | best | best | reset | best |
fork | best | best | slow | best | best | slow | fault | best |
vfork | best | best | fork | best | fork | fork | fault | fork |
locks | futex | umtx | futex | sem_t | ulock | futex | n/a | futex |
tls | %gs/x28 | %gs/x28 | %fs | %fs/x28 | %gs/x28 | %gs | %gs | best |
pthread_ | best | best | best | best | best | best | fault | best |
pthread_ | good | good | best | good | good | v3.0+ | fault | best |
pthread_ | v2.2 | v2.2 | v2.2 | v2.2 | v2.2 | v3.0+ | fault | best |
tmpfd | best | ok | ok | ok | ok | best | todo | best |
tmpfile | best | ok | ok | ok | ok | best | todo | best |
fopenat O_RDONLY | best | best | best | best | best | best | zipos | best |
fopenat O_RDWR | best | best | best | best | best | best | todo | best |
/dev/tty | best | best | best | best | best | v3.0+ | todo | best |
/dev/null | best | best | best | best | best | v3.0+ | todo | best |
/dev/stdin | best | best | best | best | best | v3.0+ | todo | best |
/dev/stdout | best | best | best | best | best | v3.0+ | todo | best |
/dev/stderr | best | best | best | best | best | v3.0+ | todo | best |
/dev/fd/𝑥 | best | best | best | best | best | v3.2.3+ | todo | best |
/dev/random | best | best | best | best | best | v3.3.4+ | todo | best |
/dev/urandom | best | best | best | best | best | v3.3.4+ | todo | best |
mmap MAP_PRIVATE | best | best | best | best | best | no cow | best | best |
mmap MAP_SHARED | best | best | yellow | best | best | best | best | wip |
mremap | v3.6.0+ | enosys | enosys | v3.6.0+ | enosys | enosys | enosys | wip |
poll | best | best | best | best | best | good | best | good |
select | best | best | best | best | best | good | fault | wip |
pselect | best | best | best | best | best | good | fault | wip |
ppoll | best | best | best | best | non-atomic | good | fault | wip |
lseek | best | best | best | best | best | best | best | best |
pledge | 2.6.23+ | ignored | best | ignored | ignored | ignored | fault | ignored |
unveil | 5.13+ | ignored | best | ignored | ignored | ignored | fault | ignored |
msync | best | best | best | best | best | partial | todo | ignored |
mprotect | best | best | best | best | best | best | todo | best |
munmap | best | best | best | best | best | best | best | best |
sigaction ucontext_t | best | best | best | best | best | best | enosys | best |
sigprocmask | best | best | best | best | best | simulated | no-op | bestp |
sigsuspend | best | best | best | best | best | simulated | no-op | best |
sigpending | best | best | best | best | best | simulated | no-op | wip |
clock_gettime REALTIME | fast | good | good | good | fast | fast | enosys | best |
clock_gettime MONOTONIC | fast | good | good | good | rdtsc | fast | enosys | depends |
clock_gettime MONOTONIC RAW | fast | good | EINVAL | good | mixed | fast | enosys | depends |
clock_gettime BOOTTIME | fast | good | good | good | good | fast | enosys | depends |
clock_gettime PROCESS CPUTIME | good | good | good | good | good | good | enosys | good |
clock_gettime THREAD CPUTIME | good | good | good | good | good | good | enosys | good |
clock_getres | kinda | good | good | ok | faked | faked | enosys | best |
ioctl FIONREAD | best | best | best | best | best | best | wip | best |
ioctl TIOCGWINSZ | best | best | best | best | best | good | wip | best |
ioctl SIOCGIFCONF | best | best | best | best | best | best | fault | ipv4 |
ioctl SIOCGIFADDR | best | best | best | best | best | best | fault | wip |
ioctl SIOCGIFNETMASK | best | best | best | best | best | best | fault | wip |
ioctl SIOCGIFBRDADDR | best | best | best | best | best | best | fault | wip |
ioctl SIOCGIFDSTADDR | best | best | best | best | best | best | fault | wip |
ioctl SIOCGIFFLAGS | best | best | best | best | best | best | fault | wip |
openpty | v2.0+ | v2.1+ | v2.1+ | v2.1+ | v2.1+ | enosys | enosys | wip |
ptsname | v2.0+ | v2.1+ | hairy | v2.1+ | v2.1+ | enosys | enosys | wip |
flock | good | good | good | good | good | good | fault | wip |
sync | notest | notest | notest | notest | notest | flush | fault | wip |
fsync | notest | notest | notest | notest | hairy | flush | fault | best |
fdatasync | notest | notest | notest | notest | notest | flush | fault | best |
copy_ | 5.9+ | 13+ | enosys | enosys | enosys | enosys | fault | wip |
sendfile | best | best | enosys | enosys | best | best | enosys | wip |
splice | 5.9+ | enosys | enosys | enosys | enosys | enosys | fault | wip |
closefrom | 5.9+ | best | best | v2.2 | enosys | enosys | enosys | best |
close_range | 5.9+ | 13+ | enosys | enosys | enosys | enosys | enosys | best |
fadvise | best | best | enosys | best | enosys | most | enosys | wip |
posix_ | best | best | enosys | best | enosys | most | enosys | wip |
truncate | best | best | best | best | best | best | fault | best |
ftruncate | best | best | best | best | best | best | enosys | best |
faccessat | good | best | best | best | best | best | zipos | best |
pipe | best | best | best | best | best | best | fault | best |
pipe2 | 2008+ | best | best | best | non-atomic | best | fault | best |
socketpair | best | best | best | best | best | best | fault | wip |
getcwd | best | best | best | best | best | best | fault | best |
chdir | best | best | best | best | best | hairy | fault | best |
fchdir | best | best | best | best | best | hairy | fault | best |
renameat | best | best | best | best | best | best | fault | best |
mkdirat | best | best | best | best | best | best | fault | best |
linkat | best | best | best | best | best | admin-only | fault | best |
unlinkat | best | best | best | best | best | hairy | fault | best |
readlinkat | best | best | best | best | best | best | fault | best |
sched_ | best | best | best | best | select | best | no-op | best |
memfd_ | best | enosys | enosys | enosys | enosys | enosys | fault | wip |
mincore | best | best | enosys | best | best | enosys | fault | wip |
madvise | best | best | best | best | best | some | fault | ignored |
dup | best | best | best | best | best | best | fault | best |
dup2 | best | best | best | best | best | best | fault | best |
dup3 | 2008+ | non-atomic | best | best | non-atomic | best | fault | best |
fcntl F_DUPFD | best | best | best | best | best | best | fault | best |
fcntl F_DUPFD_ | 2008+ | best | best | best | best | best | fault | best |
fcntl POSIX Locks | good | good | good | good | good | ok | fault | wip |
fcntl OFD Locks | best | none | none | none | none | none | fault | wip |
fcntl F_GETFL | best | best | best | best | best | best | fault | best |
fcntl F_SETFL | best | best | best | best | best | v3.0+ | fault | best |
fcntl F_GETFD | best | best | best | best | best | best | fault | best |
fcntl F_SETFD | best | best | best | best | best | best | fault | best |
fcntl F_NOTIFY | best | einval | einval | einval | einval | einval | fault | wip |
fcntl F_FULLFSYNC | einval | einval | einval | einval | best | einval | fault | einval |
fcntl F_GETPATH | einval | einval | einval | best | best | einval | fault | einval |
nanosleep | best | best | best | best | micros | micros | enosys | best |
setitimer | best | best | best | best | best | thread | fault | best |
gettid | best | good | good | good | good | good | fault | best |
getpid | best | best | best | best | best | best | best | best |
getppid | best | best | best | best | best | slow | best | best |
getuid | best | best | best | best | best | faked | best | best |
getgid | best | best | best | best | best | faked | best | best |
getrandom | 2014+ | sysctl | getentropy | sysctl | getentropy | ProcessPrng | rdrand | best |
getentropy | v2.2 | v2.2 | v2.2 | v2.2 | v2.2 | v2.2 | v2.2 | best |
umask | best | best | best | best | best | no-op | fault | best |
issetugid | best | best | best | best | best | best | zero | wip |
setuid | best | best | best | best | best | no-op | fault | best |
setgid | best | best | best | best | best | no-op | fault | best |
setreuid | best | best | best | best | best | enosys | fault | wip |
setregid | best | best | best | best | best | enosys | fault | wip |
setresuid | best | best | best | faked | faked | enosys | fault | wip |
setresgid | best | best | best | faked | faked | enosys | fault | wip |
socket | best | best | best | best | best | best | fault | ipv4 |
bind | best | best | best | best | best | good | fault | best |
connect | best | best | best | best | best | good | fault | best |
accept | best | best | best | best | best | good | fault | best |
accept4 | 2009+ | best | best | best | non-atomic | good | fault | best |
sendto | best | best | best | best | best | good | fault | wip |
recvfrom | best | best | best | best | best | good | fault | wip |
sendmsg | good | ok | ok | ok | ok | ok | fault | wip |
recvmsg | good | ok | ok | ok | ok | ok | fault | wip |
shutdown | best | best | best | best | good | best | fault | best |
getsockname | best | best | best | best | best | best | fault | best |
getpeername | best | best | best | best | best | best | fault | best |
getsockopt | best | narrow | narrow | narrow | narrow | narrow | fault | some |
setsockopt SO_TYPE | best | best | best | best | best | best | fault | tbd |
setsockopt SO_DEBUG | best | best | best | best | best | best | fault | tbd |
setsockopt SO_ERROR | best | best | best | best | best | best | fault | tbd |
setsockopt SO_BROADCAST | best | best | best | best | best | best | fault | tbd |
setsockopt SO_REUSEADDR | best | best | best | best | best | n/a | fault | tbd |
setsockopt SO_REUSEPORT | best | unsure | best | best | best | best | fault | tbd |
setsockopt SO_KEEPALIVE | best | best | best | best | best | best | fault | tbd |
setsockopt SO_ACCEPTCONN | best | best | best | best | best | best | fault | tbd |
setsockopt SO_DONTROUTE | best | best | best | best | best | best | fault | tbd |
setsockopt SO_SNDBUF | best | best | best | best | best | best | fault | tbd |
setsockopt SO_RCVBUF | best | best | best | best | best | best | fault | tbd |
setsockopt SO_SNDLOWAT | best | best | best | best | best | best | fault | tbd |
setsockopt SO_RCVLOWAT | best | best | best | best | best | best | fault | tbd |
setsockopt TCP_NODELAY | best | best | best | best | best | best | fault | tbd |
setsockopt TCP_CORK | best | best | best | best | best | best | fault | tbd |
setsockopt TCP_ | best | best | enopro | enopro | enopro | best | enosys | tbd |
setsockopt TCP_QUICKACK | best | enopro | enopro | enopro | enopro | enopro | fault | tbd |
execve | best | best | best | best | best | kludge | fault | tbd |
fexecve | best | best | enosys | enosys | enosys | enosys | enosys | tbd |
execve #! | best | best | best | best | best | v3.3.7+ | fault | tbd |
wait4 | best | best | best | best | best | v4.0.0 | fault | best |
kill | best | best | best | best | best | v4.0.0 | fault | best |
sysinfo | best | partial | partial | partial | partial | partial | enosys | faked |
uname | best | best | best | best | best | weird | enosys | tbd |
gethostname | best | best | best | best | best | best | fault | tbd |
getdomainname | best | best | best | best | best | best | fault | tbd |
fchmodat | best | best | best | best | best | limited | fault | tbd |
fchownat | best | best | best | best | best | enosys | fault | tbd |
chroot | works | works | works | works | works | enosys | fault | tbd |
mount | notest | notest | notest | notest | notest | enosys | fault | tbd |
reboot | notest | notest | notest | notest | notest | notest | fault | tbd |
utimes | 1e-6 | 1e-6 | 1e-6 | 1e-6 | 1e-6 | 1e-6 | enosys | tbd |
futimes | 2008+ | 1e-6 | 1e-6 | 1e-6 | 1e-6 | 1e-6 | enosys | tbd |
utimensat | 2008+ | 1e-9 | 1e-9 | 1e-9 | 1e-6 | 1e-7 | enosys | tbd |
futimens | 2008+ | 1e-9 | 1e-9 | 1e-9 | 1e-6 | 1e-7 | fault | tbd |
setpriority | v2.2 | v2.2 | v2.2 | v2.2 | v2.2 | quantized | fault | tbd |
getpriority | v2.2 | v2.2 | v2.2 | v2.2 | v2.2 | quantized | fault | tbd |
sem_init | best | best | best | best | best | best | fault | tbd |
sem_wait | best | best | best | ok | good | best | fault | tbd |
sem_open | best | best | best | best | best | best | fault | tbd |
pthread_ | best | best | enosys | best | enosys | enosys | fault | tbd |
pthread_ | best | best | enosys | best | enosys | enosys | fault | tbd |
pthread_ | best | best | none | broken | none | best | fault | tbd |
pthread_ | best | best | none | broken | none | none | fault | tbd |
sched_ | best | best | none | broken | none | best | fault | tbd |
sched_ | best | best | none | broken | none | best | fault | tbd |
sched_ | best | good | none | good | none | none | fault | no-op |
sched_ | best | good | none | good | none | none | fault | no-op |
sched_ | best | good | none | good | none | none | fault | no-op |
sched_ | best | good | none | good | none | none | fault | no-op |
sched_ | best | best | none | best | none | none | fault | no-op |
sched_ | best | best | none | best | none | none | fault | no-op |
sched_ | best | best | none | none | none | none | fault | enosys |
epoll | best | enosys | enosys | enosys | enosys | wepoll | fault | enosys |
clock | cgt | cgt | cgt | cgt | getrusage | gpt | fault | cgt |
getrusage | some | best | best | best | best | some | fault | best |
setrlimit | best | ok | ok | ok | ok | RLIMIT_AS | fault | best |
opendir | best | best | best | best | best | best | fault | good |
getlogin_r | getenv | sys | sys | sys | sys | sys | enoent | tbd |
login_tty | best | best | best | best | best | enosys | enosys | tbd |